using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using VB_ObjetosdeNegocio.BO;
using HistoriaLaboral.Helper;
using AgenciaEmpleo;

namespace HistoriaLaboral.AltaPersonas
{

    public partial class frmAltaPersona : AgenciaEmpleo.Plantillas.frmMoldeAltaPersonas
    {
        public tPersonas persona = new tPersonas();

        #region Singleton

        static private frmAltaPersona formAltaPersona = null;

        public frmAltaPersona()
        {
            InitializeComponent();
            CargarMunicipio();
            CargarInicio();
            persona.IdPersona = 0;

        }

        public frmAltaPersona(Int32 pIdPersona)
        {
            InitializeComponent();
            CargarMunicipio();
            CargarInicio();
            persona.IdPersona = pIdPersona;
            persona.Traer_objeto();
            CargarPersona(persona);

        }

        static public frmAltaPersona GetInstance()
        {
            if (formAltaPersona == null || formAltaPersona.IsDisposed == true)
            {
                formAltaPersona = new frmAltaPersona();
            }
            formAltaPersona.BringToFront();
            return formAltaPersona;
        }

        static public frmAltaPersona GetInstance(Int32 pIdPersona)
        {
            if (formAltaPersona == null || formAltaPersona.IsDisposed == true)
            {
                formAltaPersona = new frmAltaPersona(pIdPersona);
            }
            formAltaPersona.BringToFront();
            return formAltaPersona;
        }

        #endregion

        private void btnAgregarPlan_Click(object sender, EventArgs e)
        {
            // plan- id plan-fecha Inicio-fechafin-contraprestacion-lugar-Observ
            frmPlanes frm = new frmPlanes();
            if (frm.ShowDialog() == DialogResult.OK)
            {
                foreach (DataGridViewRow dr in dgvPlan.Rows)
                {
                    if (dr.Cells[0].Value.ToString() == frm.cboxPlan.Text)
                    {
                        dr.Visible = true;
                        return;
                    }
                }
                dgvPlan.Rows.Add(frm.cboxPlan.Text, frm.cboxPlan.SelectedValue,
                    frm.txtFechaInicio.Text.TrimStart("  /  /".ToCharArray()),
                    frm.txtFechaFin.Text.TrimStart("  /  /".ToCharArray()),
                    frm.txtContraprestacion.Text, frm.txtLugar.Text, frm.txtObservaciones.Text);
            }
        }

        private void btnSiguiente_Click(object sender, EventArgs e)
        {
            Boolean valido = true;
            valido = valido & Validaciones.ValidarBlancos(txtApellido, ep) &
                Validaciones.ValidarBlancos(txtNombre, ep) &
                Validaciones.ValidarFecha(txtFechaNac, ep) &
                Validaciones.ValidarDocumento(txtNumeroDoc, ep);
            if (valido)
            {
                if (persona.IdPersona == 0)
                {
                    CargarPersona();
                    tPersonas tmpPersona = new tPersonas();
                    if (tmpPersona.TraerFiltradoListOf(tPersonasColumnas.cNumeroDocumento.ToString(), txtNumeroDoc.Text).Count == 0)
                    {
                        //la persona no existe, ==> continuar
                        frmAltaPersona2 frm = frmAltaPersona2.GetInstance();
                        frm.MdiParent = this.MdiParent;
                        this.Visible = false;
                        frm.Show();
                    }
                    else
                    {
                        //la persona existe, ==> buscar el ID y salir.
                        int id = int.Parse(tmpPersona.TraerFiltrado(tPersonasColumnas.cNumeroDocumento.ToString(), txtNumeroDoc.Text).Tables[0].Rows[0].ItemArray.GetValue(0).ToString());
                        frmConfirmacion frm = new frmConfirmacion("Persona Existente. Codigo:", id);
                        frm.lblNuevaPersona.Text = "";
                        frm.btnAceptar.Visible = false;
                        frm.btnCancelar.Visible = false;
                        frm.btnAceptar2.Visible = true;
                        frm.ShowDialog();
                        frmPrincipal padre = (frmPrincipal)this.MdiParent;
                        padre.CloseMDIChilds("WizardAltaPersonas");
                    }
                }
                else
                {
                    CargarPersona();
                    frmAltaPersona2 frm = frmAltaPersona2.GetInstance(persona.IdPersona);
                    frm.MdiParent = this.MdiParent;
                    this.Visible = false;
                    frm.Show();
                }
            }
        }

        public void CargarPersona(tPersonas pPersona)
        {
            txtNombre.Text = pPersona.cNombre;
            txtApellido.Text = pPersona.cApellido;
            cboxTipoDoc.Text = pPersona.cTipoDocumento;
            txtNumeroDoc.Text = pPersona.cNumeroDocumento.ToString();
            try
            {

                txtFechaNac.Text = pPersona.cFechaNacimiento.Value.ToShortDateString();
            }
            catch (Exception)
            {
                //txtFechaNac.Text = "";
            }
            cboxSexo.Text = pPersona.cSexo;
            cboxEstadoCivil.Text = pPersona.cEstadoCivil;
            txtDomicilio.Text = pPersona.cDomicilioActual;
            cboxMunicipioV.SelectedValue = pPersona.IdMunicipio.ToString();
            txtEmail.Text = pPersona.cEmail;
            txtCuil.Text = pPersona.cCuil;
            txtCuit.Text = pPersona.cCuit;
            cboxDisponibilidadMudarse.Text = pPersona.cMovilidad;
            cboxDisponibilidadViajar.Text = pPersona.cViajar;
            txtOficio.Text = pPersona.cOficio;
            txtTelefono.Text = pPersona.cTelefono;

            CargarPlanes(pPersona);
        }

        private void CargarPlanes(tPersonas pPersona)
        {
            // plan- id plan-fecha Inicio-fechafin-contraprestacion-lugar-Observ


            List<tPlan_x_Persona> listaPlanes = new List<tPlan_x_Persona>();
            listaPlanes = pPersona.ListatPlan_x_Persona;//trae la lista de planes x esa persona

            foreach (tPlan_x_Persona planes in listaPlanes)
            {
                string fechaIni, fechaFin;
                try
                {
                    fechaIni = planes.cFechaAdjudicacion.Value.ToShortDateString();
                }
                catch
                {
                    fechaIni = "";
                }
                try
                {
                    fechaFin = planes.cFechaBaja.Value.ToShortDateString();
                }
                catch
                {
                    fechaFin = "";
                }
                //ver que no tire error la fecha si es nula
                dgvPlan.Rows.Add(planes.tPlanes.cNombre, planes.IdPlan, fechaIni,
                    fechaFin, planes.cContraprestacion, planes.cLugarDeContraprestacion,
                    planes.cObservaciones);
                dgvPlan.Rows[dgvPlan.Rows.Count - 1].Tag = "db";
            }
        }

        private void CargarPersona()
        {
            persona.cNombre = txtNombre.Text.TrimStart(' ');
            persona.cNombre = persona.cNombre.TrimEnd(' ');
            persona.cApellido = txtApellido.Text.TrimStart(' ');
            persona.cApellido = persona.cApellido.TrimEnd(' ');
            persona.cTipoDocumento = cboxTipoDoc.Text;
            persona.cNumeroDocumento = int.Parse(txtNumeroDoc.Text);
            try
            {
                if (Validaciones.ValidarFecha(txtFechaNac, ep))
                    persona.cFechaNacimiento = System.DateTime.Parse(txtFechaNac.Text.ToString());
            }
            catch (Exception)
            {
            }
            persona.cSexo = cboxSexo.Text;
            persona.cEstadoCivil = cboxEstadoCivil.Text;
            persona.cDomicilioActual = txtDomicilio.Text;
            persona.IdMunicipio = Int32.Parse(cboxMunicipioV.SelectedValue.ToString());
            persona.cEmail = txtEmail.Text.ToLower();
            persona.cCuil = txtCuil.Text.TrimStart(" -        -".ToCharArray());
            persona.cCuit = txtCuit.Text.TrimStart(" -        -".ToCharArray());
            persona.cMovilidad = cboxDisponibilidadMudarse.Text;
            persona.cViajar = cboxDisponibilidadViajar.Text;
            persona.cOficio = txtOficio.Text;
            persona.cTelefono = txtTelefono.Text;
            persona.cAgua = "";
            persona.cCloaca = "";
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            frmPrincipal padre = (frmPrincipal)this.MdiParent;
            padre.CloseMDIChilds("WizardAltaPersonas");
        }

        private void btnQuitarPlan_Click(object sender, EventArgs e)
        {
            // plan - id plan - fecha Inicio - fechafin - contraprestacion - lugar - Observ

            if (dgvPlan.SelectedRows.Count != 0)
            {
                tPlan_x_Persona mPlan = new tPlan_x_Persona();
                mPlan.IdPersona = persona.IdPersona;
                mPlan.IdPlan = int.Parse(dgvPlan.SelectedRows[0].Cells[1].Value.ToString());

                if (dgvPlan.SelectedRows[0].Tag != null)
                {
                    dgvPlan.SelectedRows[0].Visible = false;
                }
                else
                {
                    dgvPlan.Rows.Remove(dgvPlan.SelectedRows[0]);
                }
            }
        }

        private void CargarMunicipio()
        {
            tMunicipios mMunicipio = new tMunicipios();
            cboxMunicipioV.DataSource = mMunicipio.TraerTodos().Tables[0];
            cboxMunicipioV.DisplayMember = tMunicipiosColumnas.cNombre.ToString();
            cboxMunicipioV.ValueMember = tMunicipiosColumnas.IdMunicipio.ToString();
        }

        public void GuardarPlanes(int pIdPersona)
        {
            // plan - id plan - fecha Inicio - fechafin - contraprestacion - lugar - Observ

            if (dgvPlan.Rows.Count != 0)
            {
                foreach (DataGridViewRow dr in dgvPlan.Rows)
                {
                    tPlan_x_Persona mPlan = new tPlan_x_Persona();
                    mPlan.IdPlan = Int32.Parse(dr.Cells[1].Value.ToString());
                    mPlan.IdPersona = pIdPersona;
                    try
                    {
                        mPlan.cFechaAdjudicacion = System.DateTime.Parse(dr.Cells[2].Value.ToString());
                    }
                    catch (Exception)
                    { }

                    try
                    {
                        mPlan.cFechaBaja = System.DateTime.Parse(dr.Cells[3].Value.ToString());
                    }
                    catch (Exception)
                    { }

                    mPlan.cContraprestacion = dr.Cells[4].Value.ToString();
                    mPlan.cLugarDeContraprestacion = dr.Cells[5].Value.ToString();
                    mPlan.cObservaciones = dr.Cells[6].Value.ToString();
                    if (dr.Visible)
                    {
                        mPlan.Guardar();
                    }
                    else {
                        mPlan.Eliminar();
                    }
                }
            }
        }

        private void dgvPlan_CellContentDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            // plan - id plan - fecha Inicio - fechafin - contraprestacion - lugar - Observ

            if (dgvPlan.SelectedRows.Count != 0)
            {
                frmPlanes frm = new frmPlanes();
                frm.cboxPlan.Text = dgvPlan.SelectedRows[0].Cells[0].Value.ToString();
                frm.txtFechaInicio.Text = dgvPlan.SelectedRows[0].Cells[2].Value.ToString();
                frm.txtFechaFin.Text = dgvPlan.SelectedRows[0].Cells[3].Value.ToString();
                frm.txtContraprestacion.Text = dgvPlan.SelectedRows[0].Cells[4].Value.ToString();
                frm.txtLugar.Text = dgvPlan.SelectedRows[0].Cells[5].Value.ToString();
                frm.txtObservaciones.Text = dgvPlan.SelectedRows[0].Cells[6].Value.ToString();

                if (frm.ShowDialog() == DialogResult.OK)
                {
                    dgvPlan.Rows.Remove(dgvPlan.CurrentRow);
                    dgvPlan.Rows.Add(frm.cboxPlan.Text, frm.cboxPlan.SelectedValue,
                        frm.txtFechaInicio.Text.TrimStart(" / /".ToCharArray()),
                        frm.txtFechaFin.Text.TrimStart(" / /".ToCharArray()),
                        frm.txtContraprestacion.Text,
                        frm.txtLugar.Text,
                        frm.txtObservaciones.Text);
                }
            }
        }

        private void CargarInicio()
        {
            cboxDisponibilidadMudarse.SelectedIndex = 0;
            cboxDisponibilidadViajar.SelectedIndex = 0;
            cboxEstadoCivil.Text = "Soltero/a";
            cboxMunicipioV.Text = "RESISTENCIA";
            cboxSexo.Text = "Femenino";
            cboxTipoDoc.Text = "DNI";
        }

        private void txtNumeroDoc_Leave(object sender, EventArgs e)
        {
            Validaciones.ValidarDocumento(txtNumeroDoc, ep);
        }

        private void txtTelefono_Leave(object sender, EventArgs e)
        {
            if (txtTelefono.Text != "") 
            {
                Validaciones.ValidarSoloNumeros(txtTelefono, ep);
            }
        }

        private void txtFechaNac_Leave(object sender, EventArgs e)
        {
            Validaciones.ValidarFecha(txtFechaNac,ep);

        }

    }
}

